package edu.northwestern.cbits.purple_robot_manager.http;
import java.io.IOException;
import java.util.Map;
import org.apache.http.HttpException;
import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.entity.StringEntity;
import org.apache.http.protocol.HttpContext;
import org.apache.http.protocol.HttpRequestHandler;
import org.json.JSONException;
import org.json.JSONObject;
import android.content.Context;
import edu.northwestern.cbits.purple_robot_manager.R;
import edu.northwestern.cbits.purple_robot_manager.scripting.SchemeEngine;
public class JsonVariablesRequestHandler implements HttpRequestHandler
{
private Context _context = null;
public JsonVariablesRequestHandler(Context context)
{
super();
this._context = context;
}
public static JSONObject fetchStoredValues(Context context)
{
JSONObject obj = new JSONObject();
SchemeEngine engine = new SchemeEngine(context, null);
for (String ns : engine.fetchNamespaceList())
{
JSONObject nsObject = new JSONObject();
Map<String, Object> nsMap = engine.fetchNamespaceMap(ns);
for (String key : nsMap.keySet())
{
try
{
nsObject.put(key, nsMap.get(key));
}
catch (JSONException e)
{
e.printStackTrace();
}
}
try
{
obj.put(ns, nsObject);
}
catch (JSONException e)
{
e.printStackTrace();
}
}
return obj;
}
public void handle(HttpRequest request, HttpResponse response, HttpContext argument) throws HttpException,
IOException
{
if (BasicAuthHelper.isAuthenticated(request) == false)
{
BasicAuthHelper.unauthedResponse(response);
return;
}
response.setStatusCode(HttpStatus.SC_OK);
JSONObject obj = JsonVariablesRequestHandler.fetchStoredValues(this._context);
try
{
StringEntity body = new StringEntity(obj.toString(2));
body.setContentType("application/json");
response.setEntity(body);
}
catch (JSONException e)
{
e.printStackTrace();
response.setStatusCode(HttpStatus.SC_INTERNAL_SERVER_ERROR);
StringEntity body = new StringEntity(this._context.getString(R.string.error_malformed_request));
body.setContentType("text/plain");
response.setEntity(body);
}
}
}